package abstractclass_interface;

import java.awt.*;

//抽象类
abstract class Animal {
    //抽象方法
    public abstract void func();
}
class Dog extends Animal {
    public void func() {
        System.out.println("狗");
    }
}

public class Abstract {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.func();
    }
}


//接口
//一个(多个)类实现一个接口
interface IAnimal {
    //抽象方法
    public abstract void species(); //不加也默认为public abstract类型的抽象方法，该方法必须重写


    //接口  成员变量
    int a = 5;//1、a 默认是public static final类型 2、a必须赋初值，不然报错
    //接口  成员方法
    public default void func() {//非抽象成员方法，必须有default，该方法可以重写

    }
    //接口  静态方法
    public static void func2() {

    }
}
//Dog类执行IAnimal接口
class Dog implements IAnimal {  //鼠标放在该行，Alt+Enter,快捷键重写
    @Override
    public void species() {
        System.out.println("Dog.species");
    }

}
class Cat implements IAnimal {
    @Override
    public void species() {
        System.out.println("Cat.species");
    }
}
//实现多态：发生向上转型，动态绑定，重写
public class Abstract {
    public static void judgeSpecies(IAnimal iAnimal) {
        iAnimal.species();
    }
    public static void main(String[] args) {
        Dog dog = new Dog();
        judgeSpecies(dog);

        Cat cat = new Cat();
        judgeSpecies(cat);
    }
}


//一个类实现多个个接口sp
interface IRunning {
    void run();//默认为public abstract类型
}
interface ISwimming {
    void swim();
}
//IAmphibious(两栖的)继承了IRunning和ISwimming两个接口
interface IAmphibious extends IRunning,ISwimming {
    void sleep();
}
class Frog implements IAmphibious {
    //重写
    public void run() {

    }
    public void swim() {

    }
    public void sleep() {

    }
}